package com.atguigu.bean;

import javax.swing.plaf.PanelUI;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.*;

/**
 * @ Author:任留辉
 * @ Description:购物车
 * @ Date:Created in 9:45 2021/3/19 0019
 */
public class Cart  implements Serializable {

    //map集合存储了所有的购物项，键为图书的id，值为购物项
    private Map<String, CartItem> map = new LinkedHashMap<>();

    private Integer totalCount;

    private Double totalAmount;

    public Map<String, CartItem> getMap() {
        return map;
    }

    public void setMap(Map<String, CartItem> map) {
        this.map = map;
    }

    public Integer getTotalCount() {
        totalCount = 0;
        for (CartItem cartItem : getCartItemList()) {
            totalCount += cartItem.getCount();
        }
        return totalCount;
    }

    public void setTotalCount(Integer totalCount) {
        this.totalCount = totalCount;
    }

    public Double getTotalAmount() {
        BigDecimal bigDecimal1 = new BigDecimal("0.0");
        for (CartItem cartItem : getCartItemList()) {
            BigDecimal bigDecimal2 = new BigDecimal(cartItem.getAmount()+"");
            bigDecimal1 = bigDecimal1.add(bigDecimal2);
        }
        return bigDecimal1.doubleValue();
    }

    public void setTotalAmount(Double totalAmount) {
        this.totalAmount = totalAmount;
    }

    //获取map中所有的购物项所对应的集合，并作为返回值返回
    public List<CartItem> getCartItemList(){
        return new ArrayList<>(map.values());
    }

    //加入购物车（添加购物项）
    public void addCartItem(Book book){
        //获取图书的id
        Integer id = book.getId();
        //根据id在购物车中获取所对应的购物项
        CartItem cartItem = map.get(id + "");
        //判断cartItem对象是否为null
        if(cartItem == null){
            //表示此图书第一次添加到购物车中，需要根据book对象创建CartItem对象
            cartItem = new CartItem();
            cartItem.setBook(book);
            cartItem.setCount(1);
        }else{
            //表示购物车中已经存在此图书，需要将此图书所对应的数量+1
            cartItem.setCount(cartItem.getCount() + 1);
        }
        //将购物项添加到购物车中
        map.put(id+"", cartItem);
    }

    //删除购物项
    public void deleteCartItem(String bookId){
        map.remove(bookId);
    }

    //清空购物车
    public void clearCart(){
        map.clear();
    }

    //更新购物项的数量
    public void updateCount(String bookId, String countStr){
        try {
            //将从浏览器获取的countStr转换为数值类型
            int count = Integer.parseInt(countStr);
            //根据图书id获取购物车中的购物项
            CartItem cartItem = map.get(bookId);
            //判断count，仅仅只有count>0时才更新数量
            if(count > 0){
                cartItem.setCount(count);
            }
            //判断count是否为0，若为0直接删除此购物项
            if(count == 0){
                map.remove(bookId);
            }
        } catch (NumberFormatException e) {}
    }

}
